/*

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

*/
module derelict.sdl2.functions;

private {
    import core.stdc.stdio;
    import core.stdc.stdarg;
    import derelict.util.system;
    import derelict.sdl2.types;
}

extern( C ) nothrow {
    // SDL.h
    alias da_SDL_Init = int function( Uint32 );
    alias da_SDL_InitSubSystem = int function( Uint32 );
    alias da_SDL_QuitSubSystem = void function( Uint32 );
    alias da_SDL_WasInit = Uint32 function( Uint32 );
    alias da_SDL_Quit = void function();
    alias da_SDL_free = void function( void* mem );

    // SDL_assert.h
    alias da_SDL_SetAssertionHandler = void function(SDL_AssertionHandler, void*);
    alias da_SDL_GetAssertionReport = const(SDL_assert_data)* function();
    alias da_SDL_ResetAssertionReport = void function();

    // SDL_audio.h
    alias da_SDL_GetNumAudioDrivers = int function();
    alias da_SDL_GetAudioDriver = const( char )* function( int );
    alias da_SDL_AudioInit = int function( const( char )* );
    alias da_SDL_AudioQuit = void function();
    alias da_SDL_GetCurrentAudioDriver = const( char )* function();
    alias da_SDL_OpenAudio = int function( SDL_AudioSpec*, SDL_AudioSpec* );
    alias da_SDL_GetNumAudioDevices = int function( int );
    alias da_SDL_GetAudioDeviceName = const( char )* function( int, int );
    alias da_SDL_OpenAudioDevice = SDL_AudioDeviceID function( const( char )*, int, const( SDL_AudioSpec )*,SDL_AudioSpec*,int );
    alias da_SDL_GetAudioStatus = SDL_AudioStatus function();
    alias da_SDL_GetAudioDeviceStatus = SDL_AudioStatus function( SDL_AudioDeviceID );
    alias da_SDL_PauseAudio = void function( int );
    alias da_SDL_PauseAudioDevice = void function( SDL_AudioDeviceID, int );
    alias da_SDL_LoadWAV_RW = SDL_AudioSpec* function( SDL_RWops*, int, SDL_AudioSpec*, Uint8**, Uint32* );
    alias da_SDL_FreeWAV = void function( Uint8* );
    alias da_SDL_BuildAudioCVT = int function( SDL_AudioCVT*, SDL_AudioFormat, Uint8, int, SDL_AudioFormat, Uint8, int );
    alias da_SDL_ConvertAudio = int function( SDL_AudioCVT* );
    alias da_SDL_MixAudio = void function( Uint8*, const( Uint8 )*, Uint32, int );
    alias da_SDL_MixAudioFormat = void function( Uint8*, const( Uint8 )*, SDL_AudioFormat, Uint32, int );
    alias da_SDL_LockAudio = void function();
    alias da_SDL_LockAudioDevice = void function( SDL_AudioDeviceID );
    alias da_SDL_UnlockAudio = void function();
    alias da_SDL_UnlockAudioDevice = void function( SDL_AudioDeviceID );
    alias da_SDL_CloseAudio = void function();
    alias da_SDL_CloseAudioDevice = void function();
    alias da_SDL_AudioDeviceConnected = int function( SDL_AudioDeviceID );

    // SDL_clipboard.h
    alias da_SDL_SetClipboardText = int function( const( char )* );
    alias da_SDL_GetClipboardText = char* function();
    alias da_SDL_HasClipboardText = SDL_bool function();

    // SDL_cpuinfo.h
    alias da_SDL_GetCPUCount = int function();
    alias da_SDL_GetCPUCacheLineSize = int function();
    alias da_SDL_HasRDTSC = SDL_bool function();
    alias da_SDL_HasAltiVec = SDL_bool function();
    alias da_SDL_HasMMX = SDL_bool function();
    alias da_SDL_Has3DNow = SDL_bool function();
    alias da_SDL_HasSSE = SDL_bool function();
    alias da_SDL_HasSSE2 = SDL_bool function();
    alias da_SDL_HasSSE3 = SDL_bool function();
    alias da_SDL_HasSSE41 = SDL_bool function();
    alias da_SDL_HasSSE42 = SDL_bool function();
    alias da_SDL_GetSystemRAM = int function();

    // SDL_error.h
    alias da_SDL_SetError = void function( const( char )*, ... );
    alias da_SDL_GetError = const( char )* function();
    alias da_SDL_ClearError = void function();

    // SDL_events.h
    alias da_SDL_PumpEvents = void function();
    alias da_SDL_PeepEvents = int function( SDL_Event*, int, SDL_eventaction, Uint32, Uint32 );
    alias da_SDL_HasEvent = SDL_bool function( Uint32 );
    alias da_SDL_HasEvents = SDL_bool function( Uint32, Uint32 );
    alias da_SDL_FlushEvent = void function( Uint32 );
    alias da_SDL_FlushEvents = void function( Uint32, Uint32 );
    alias da_SDL_PollEvent = int function( SDL_Event* );
    alias da_SDL_WaitEvent = int function( SDL_Event* );
    alias da_SDL_WaitEventTimeout = int function( SDL_Event*, int );
    alias da_SDL_PushEvent = int function( SDL_Event* );
    alias da_SDL_SetEventFilter = void function( SDL_EventFilter, void* );
    alias da_SDL_GetEventFilter = void function( SDL_EventFilter*, void** );
    alias da_SDL_AddEventWatch = void function( SDL_EventFilter, void* );
    alias da_SDL_DelEventWatch = void function( SDL_EventFilter, void* );
    alias da_SDL_FilterEvents = void function( SDL_EventFilter, void* );
    alias da_SDL_EventState = Uint8 function( Uint32, int );
    alias da_SDL_RegisterEvents = Uint32 function( int );

    // SDL_gamecontroller.h
    alias da_SDL_GameControllerAddMapping = int function( const( char )* );
    alias da_SDL_GameControllerMappingForGUID = char* function( SDL_JoystickGUID );
    alias da_SDL_GameControllerMapping = char* function( SDL_GameController* );
    alias da_SDL_IsGameController = SDL_bool function( int );
    alias da_SDL_GameControllerNameForIndex = const( char )* function( int );
    alias da_SDL_GameControllerOpen = SDL_GameController* function( int );
    alias da_SDL_GameControllerName = const( char )* function( SDL_GameController* );
    alias da_SDL_GameControllerGetAttached = SDL_bool function( SDL_GameController* );
    alias da_SDL_GameControllerGetJoystick = SDL_Joystick* function( SDL_GameController* );
    alias da_SDL_GameControllerEventState = int function( int );
    alias da_SDL_GameControllerUpdate = void function();
    alias da_SDL_GameControllerGetAxisFromString = SDL_GameControllerAxis function( const( char )* );
    alias da_SDL_GameControllerGetStringForAxis = const( char )* function( SDL_GameControllerAxis );
    alias da_SDL_GameControllerGetBindForAxis = SDL_GameControllerButtonBind function( SDL_GameController*, SDL_GameControllerAxis );
    alias da_SDL_GameControllerGetAxis = Sint16 function( SDL_GameController*, SDL_GameControllerAxis );
    alias da_SDL_GameControllerGetButtonFromString = SDL_GameControllerButton function( const( char* ) );
    alias da_SDL_GameControllerGetStringForButton = const( char )* function( SDL_GameControllerButton );
    alias da_SDL_GameControllerGetBindForButton = SDL_GameControllerButtonBind function( SDL_GameController*, SDL_GameControllerButton );
    alias da_SDL_GameControllerGetButton = Uint8 function( SDL_GameController*, SDL_GameControllerButton );
    alias da_SDL_GameControllerClose = void function( SDL_GameController* );


    // SDL_gesture.h
    alias da_SDL_RecordGesture = int function( SDL_TouchID );
    alias da_SDL_SaveAllDollarTemplates = int function( SDL_RWops* );
    alias da_SDL_SaveDollarTemplate = int function( SDL_GestureID, SDL_RWops* );
    alias da_SDL_LoadDollarTemplates = int function( SDL_TouchID, SDL_RWops* );

    // SDL_haptic.h
    alias da_SDL_NumHaptics = int function();
    alias da_SDL_HapticName = const( char )* function( int );
    alias da_SDL_HapticOpen = SDL_Haptic* function( int );
    alias da_SDL_HapticOpened = int function( int );
    alias da_SDL_HapticIndex = int function( SDL_Haptic* );
    alias da_SDL_MouseIsHaptic = int function();
    alias da_SDL_HapticOpenFromMouse = SDL_Haptic* function();
    alias da_SDL_JoystickIsHaptic = int function( SDL_Joystick* );
    alias da_SDL_HapticOpenFromJoystick = SDL_Haptic* function( SDL_Joystick* );
    alias da_SDL_HapticClose = int function( SDL_Haptic* );
    alias da_SDL_HapticNumEffects = int function( SDL_Haptic* );
    alias da_SDL_HapticNumEffectsPlaying = int function( SDL_Haptic* );
    alias da_SDL_HapticQuery = uint function( SDL_Haptic* );
    alias da_SDL_HapticNumAxes = int function( SDL_Haptic* );
    alias da_SDL_HapticEffectSupported = int function( SDL_Haptic*, SDL_HapticEffect* );
    alias da_SDL_HapticNewEffect = int function( SDL_Haptic*, SDL_HapticEffect* );
    alias da_SDL_HapticUpdateEffect = int function( SDL_Haptic*, int, SDL_HapticEffect* );
    alias da_SDL_HapticRunEffect = int function( SDL_Haptic*, int, SDL_HapticEffect* );
    alias da_SDL_HapticStopEffect = int function( SDL_Haptic*, int );
    alias da_SDL_HapticDestroyEffect = int function( SDL_Haptic*, int );
    alias da_SDL_HapticGetEffectStatus = int function( SDL_Haptic*, int );
    alias da_SDL_HapticSetGain = int function( SDL_Haptic*, int );
    alias da_SDL_HapticSetAutocenter = int function( SDL_Haptic*, int );
    alias da_SDL_HapticPause = int function( SDL_Haptic* );
    alias da_SDL_HapticUnpause = int function( SDL_Haptic* );
    alias da_SDL_HapticStopAll = int function( SDL_Haptic* );
    alias da_SDL_HapticRumbleSupported = int function( SDL_Haptic* );
    alias da_SDL_HapticRumbleInit = int function( SDL_Haptic* );
    alias da_SDL_HapticRumblePlay = int function( SDL_Haptic*, float, Uint32 );
    alias da_SDL_HapticRumbleStop = int function( SDL_Haptic* );

    // SDL_hints.h
    alias da_SDL_SetHintWithPriority = SDL_bool function( const( char )*, const( char )*, SDL_HintPriority );
    alias da_SDL_SetHint = SDL_bool function( const( char )*, const( char )* );
    alias da_SDL_GetHint = const( char )* function( const( char )* );
    alias da_SDL_AddHintCallback = void function( const( char )*, SDL_HintCallback, void* );
    alias da_SDL_DelHintCallback = void function( const( char )*, SDL_HintCallback, void* );
    alias da_SDL_ClearHints = void function();

    // SDL_input.h
    alias da_SDL_RedetectInputDevices = int function();
    alias da_SDL_GetNumInputDevices = int function();
    alias da_SDL_GetInputDeviceName = const( char )* function( int );
    alias da_SDL_IsDeviceDisconnected = int function( int );

    // SDL_joystick.h
    alias da_SDL_NumJoysticks = int function();
    alias da_SDL_JoystickNameForIndex = const( char )* function( int );
    alias da_SDL_JoystickOpen = SDL_Joystick* function( int );
    alias da_SDL_JoystickName = const( char )* function( SDL_Joystick* );
    alias da_SDL_JoystickGetDeviceGUID = JoystickGUID function( int );
    alias da_SDL_JoystickGetGUID = JoystickGUID function( SDL_Joystick* );
    alias da_SDL_JoystickGetGUIDString = char* function( JoystickGUID );
    alias da_SDL_JoystickGetGUIDFromString = JoystickGUID function( const( char )* );
    alias da_SDL_JoystickGetAttached = SDL_bool function( SDL_Joystick* );
    alias da_SDL_JoystickInstanceID = SDL_JoystickID function( SDL_Joystick* );
    alias da_SDL_JoystickNumAxes = int function( SDL_Joystick* );
    alias da_SDL_JoystickNumBalls = int function( SDL_Joystick* );
    alias da_SDL_JoystickNumHats = int function( SDL_Joystick* );
    alias da_SDL_JoystickNumButtons = int function( SDL_Joystick* );
    alias da_SDL_JoystickUpdate = int function( SDL_Joystick* );
    alias da_SDL_JoystickEventState = int function( int );
    alias da_SDL_JoystickGetAxis = Sint16 function( SDL_Joystick*, int );
    alias da_SDL_JoystickGetHat = Uint8 function( SDL_Joystick*, int );
    alias da_SDL_JoystickGetBall = int function( SDL_Joystick*, int, int*, int* );
    alias da_SDL_JoystickGetButton = Uint8 function( SDL_Joystick*, int );
    alias da_SDL_JoystickClose = void function( SDL_Joystick* );

    // SDL_keyboard.h
    alias da_SDL_GetKeyboardFocus = SDL_Window* function();
    alias da_SDL_GetKeyboardState = Uint8* function( int* );
    alias da_SDL_GetModState = SDL_Keymod function();
    alias da_SDL_SetModState = void function( SDL_Keymod );
    alias da_SDL_GetKeyFromScancode = SDL_Keycode function( SDL_Scancode );
    alias da_SDL_GetScancodeFromKey = SDL_Scancode function( SDL_Keycode );
    alias da_SDL_GetScancodeName = const( char )* function( SDL_Scancode );
    alias da_SDL_GetScancodeFromName = SDL_Scancode function( const( char )* );
    alias da_SDL_GetKeyName = const( char )* function( SDL_Keycode );
    alias da_SDL_GetKeyFromName = SDL_Keycode function( const( char )* );
    alias da_SDL_StartTextInput = void function();
    alias da_SDL_IsTextInputActive = SDL_bool function();
    alias da_SDL_StopTextInput = void function();
    alias da_SDL_SetTextInputRect = void function( SDL_Rect* );
    alias da_SDL_HasScreenKeyboardSupport = SDL_bool function();
    alias da_SDL_IsScreenKeyboardShown = SDL_bool function( SDL_Window* );

    // SDL_loadso.h
    alias da_SDL_LoadObject = void* function( const( char )* );
    alias da_SDL_LoadFunction = void* function( void*, const( char* ) );
    alias da_SDL_UnloadObject = void function( void* );

    // SDL_log.h
    alias da_SDL_LogSetAllPriority = void function( SDL_LogPriority );
    alias da_SDL_LogSetPriority = void function( int, SDL_LogPriority );
    alias da_SDL_LogGetPriority = SDL_LogPriority function( int );
    alias da_SDL_LogResetPriorities = void function();
    alias da_SDL_Log = void function( const( char )*, ... );
    alias da_SDL_LogVerbose = void function( int, const( char )*, ... );
    alias da_SDL_LogDebug = void function( int, const( char )*, ... );
    alias da_SDL_LogInfo = void function( int, const( char )*, ... );
    alias da_SDL_LogWarn = void function( int, const( char )*, ... );
    alias da_SDL_LogError = void function( int, const( char )*, ... );
    alias da_SDL_LogCritical = void function( int, const( char )*, ... );
    alias da_SDL_LogMessage = void function( int, SDL_LogPriority, const( char )*, ... );
    alias da_SDL_LogMessageV = void function( int, SDL_LogPriority, const( char )*, va_list );
    alias da_SDL_LogGetOutputFunction = void function( SDL_LogOutputFunction, void** );
    alias da_SDL_LogSetOutputFunction = void function( SDL_LogOutputFunction, void* );

    // SDL_messagebox.h
    alias da_SDL_ShowMessageBox = int function( const( SDL_MessageBoxData )*, int* );
    alias da_SDL_ShowSimpleMessageBox = int function( Uint32, const( char )*, const( char )*, SDL_Window* );

    // SDL_mouse.h
    alias da_SDL_GetMouseFocus = SDL_Window* function();
    alias da_SDL_GetMouseState = Uint32 function( int*, int* );
    alias da_SDL_GetRelativeMouseState = Uint32 function( int*, int* );
    alias da_SDL_WarpMouseInWindow = void function( SDL_Window*, int, int );
    alias da_SDL_SetRelativeMouseMode = int function( SDL_bool );
    alias da_SDL_GetRelativeMouseMode = SDL_bool function();
    alias da_SDL_CreateCursor = SDL_Cursor* function( const( Uint8 )*, const( Uint8 )*, int, int, int, int );
    alias da_SDL_CreateColorCursor = SDL_Cursor* function( SDL_Surface*, int, int );
    alias da_SDL_CreateSystemCursor = SDL_Cursor* function( SDL_SystemCursor );
    alias da_SDL_SetCursor = void function( SDL_Cursor* );
    alias da_SDL_GetCursor = SDL_Cursor* function();
    alias da_SDL_FreeCursor = void function( SDL_Cursor* );
    alias da_SDL_ShowCursor = int function( int );

    // SDL_pixels.h
    alias da_SDL_GetPixelFormatName = const( char )* function( Uint32 );
    alias da_SDL_PixelFormatEnumToMasks = SDL_bool function( Uint32, int*, Uint32*, Uint32*, Uint32*, Uint32* );
    alias da_SDL_MasksToPixelFormatEnum = Uint32 function( int, Uint32, Uint32, Uint32, Uint32 );
    alias da_SDL_AllocFormat = SDL_PixelFormat* function( Uint32 );
    alias da_SDL_FreeFormat = void function( SDL_PixelFormat* );
    alias da_SDL_AllocPalette = SDL_Palette* function( int );
    alias da_SDL_SetPixelFormatPalette = int function( SDL_PixelFormat*, SDL_Palette* );
    alias da_SDL_SetPaletteColors = int function( SDL_Palette*, const( SDL_Color )*, int, int );
    alias da_SDL_FreePalette = void function( SDL_Palette* );
    alias da_SDL_MapRGB = Uint32 function( const( SDL_PixelFormat )*, Uint8, Uint8, Uint8 );
    alias da_SDL_MapRGBA = Uint32 function( const( SDL_PixelFormat )*, Uint8, Uint8, Uint8, Uint8 );
    alias da_SDL_GetRGB = void function( Uint32, const( SDL_PixelFormat )*, Uint8*, Uint8*, Uint8* );
    alias da_SDL_GetRGBA = void function( Uint32, const( SDL_PixelFormat )*, Uint8*, Uint8*, Uint8*, Uint8* );
    alias da_SDL_CalculateGammaRamp = void function( float, Uint16* );

    // SDL_platform.h
    alias da_SDL_GetPlatform = const( char )* function();

    // SDL_power.h
    alias da_SDL_GetPowerInfo = SDL_PowerState function( int*, int* );

    // SDL_Rect.h
    alias da_SDL_HasIntersection = SDL_bool function( const( SDL_Rect )*, const( SDL_Rect )* );
    alias da_SDL_IntersectRect = SDL_bool function( const( SDL_Rect )*, const( SDL_Rect )*, SDL_Rect* );
    alias da_SDL_UnionRect = void function( const( SDL_Rect )*, const( SDL_Rect )*, SDL_Rect* );
    alias da_SDL_EnclosePoints = void function( const( SDL_Point )*, int, const( SDL_Rect )*, SDL_Rect* );
    alias da_SDL_IntersectRectAndLine = SDL_bool function( const( SDL_Rect )*, int*, int*, int*, int* );

    // SDL_Render.h
    alias da_SDL_GetNumRenderDrivers = int function();
    alias da_SDL_GetRenderDriverInfo = int function( int, SDL_RendererInfo* );
    alias da_SDL_CreateWindowAndRenderer = int function( int, int, Uint32, SDL_Window**, SDL_Renderer** );
    alias da_SDL_CreateRenderer = SDL_Renderer* function( SDL_Window*, int, Uint32 );
    alias da_SDL_CreateSoftwareRenderer = SDL_Renderer* function( SDL_Surface* );
    alias da_SDL_GetRenderer = SDL_Renderer* function( SDL_Window* );
    alias da_SDL_GetRendererInfo = int function( SDL_Renderer*, SDL_RendererInfo* );
    alias da_SDL_CreateTexture = SDL_Texture* function( SDL_Renderer*, Uint32, int, int, int );
    alias da_SDL_CreateTextureFromSurface = SDL_Texture* function( SDL_Renderer*, SDL_Surface* );
    alias da_SDL_QueryTexture = int function( SDL_Texture*, Uint32*, int*, int*, int* );
    alias da_SDL_SetTextureColorMod = int function( SDL_Texture*, Uint8, Uint8, Uint8 );
    alias da_SDL_GetTextureColorMod = int function( SDL_Texture*, Uint8*, Uint8*, Uint8* );
    alias da_SDL_SetTextureAlphaMod = int function( SDL_Texture*, Uint8 );
    alias da_SDL_GetTextureAlphaMod = int function( SDL_Texture*, Uint8* );
    alias da_SDL_SetTextureBlendMode = int function( SDL_Texture*, SDL_BlendMode );
    alias da_SDL_GetTextureBlendMode = int function( SDL_Texture*, SDL_BlendMode* );
    alias da_SDL_UpdateTexture = int function( SDL_Texture*, const( SDL_Rect )*, const( void )*, int );
    alias da_SDL_UpdateYUVTexture = int function( SDL_Texture*, const( SDL_Rect )*, const( Uint8 )*, int, const( Uint8 )*, int, const( Uint8 )*, int );
    alias da_SDL_LockTexture = int function( SDL_Texture*, const( SDL_Rect )*, void**, int* );
    alias da_SDL_UnlockTexture = int function( SDL_Texture* );
    alias da_SDL_RenderTargetSupported = SDL_bool function( SDL_Renderer* );
    alias da_SDL_SetRenderTarget = int function( SDL_Renderer*, SDL_Texture* );
    alias da_SDL_GetRenderTarget = SDL_Texture* function( SDL_Renderer* );
    alias da_SDL_RenderSetLogicalSize = int function( SDL_Renderer*, int, int );
    alias da_SDL_RenderGetLogicalSize = void function( SDL_Renderer*, int*, int* );
    alias da_SDL_RenderSetViewport = int function( SDL_Renderer*, const( SDL_Rect )* );
    alias da_SDL_RenderGetViewport = void function( SDL_Renderer*, SDL_Rect* );
    alias da_SDL_RenderSetScale = int function( SDL_Renderer*, float, float );
    alias da_SDL_RenderGetScale = int function( SDL_Renderer*, float*, float* );
    alias da_SDL_SetRenderDrawColor = int function( SDL_Renderer*, Uint8, Uint8, Uint8, Uint8 );
    alias da_SDL_GetRenderDrawColor = int function( SDL_Renderer*, Uint8*, Uint8*, Uint8*, Uint8* );
    alias da_SDL_SetRenderDrawBlendMode = int function( SDL_Renderer*, SDL_BlendMode );
    alias da_SDL_GetRenderDrawBlendMode = int function( SDL_Renderer*, SDL_BlendMode* );
    alias da_SDL_RenderClear = int function( SDL_Renderer* );
    alias da_SDL_RenderDrawPoint = int function( SDL_Renderer*, int, int );
    alias da_SDL_RenderDrawPoints = int function( SDL_Renderer*, const( SDL_Point )*, int );
    alias da_SDL_RenderDrawLine = int function( SDL_Renderer*, int, int, int, int );
    alias da_SDL_RenderDrawLines = int function( SDL_Renderer*, const( SDL_Point )*, int );
    alias da_SDL_RenderDrawRect = int function( SDL_Renderer*, const( SDL_Rect )* );
    alias da_SDL_RenderDrawRects = int function( SDL_Renderer*, const( SDL_Rect )*, int );
    alias da_SDL_RenderFillRect = int function( SDL_Renderer*, const( SDL_Rect )* );
    alias da_SDL_RenderFillRects = int function( SDL_Renderer*, const( SDL_Rect )* );
    alias da_SDL_RenderCopy = int function( SDL_Renderer*, SDL_Texture*, const( SDL_Rect )*, const( SDL_Rect* ) );
    alias da_SDL_RenderCopyEx = int function( SDL_Renderer*, SDL_Texture*, const( SDL_Rect )*, const( SDL_Rect )*, const( double ), const( SDL_Point )*, const( SDL_RendererFlip ) );
    alias da_SDL_RenderReadPixels = int function( SDL_Renderer*, const( SDL_Rect )*, Uint32, void*, int );
    alias da_SDL_RenderPresent = void function( SDL_Renderer* );
    alias da_SDL_DestroyTexture = void function( SDL_Texture* );
    alias da_SDL_DestroyRenderer = void function( SDL_Renderer* );
    alias da_SDL_GL_BindTexture = int function( SDL_Texture*, float*, float* );
    alias da_SDL_GL_UnbindTexture = int function( SDL_Texture* );

    // SDL_rwops.h
    alias da_SDL_RWFromFile = SDL_RWops* function( const( char )*, const( char )* );
    alias da_SDL_RWFromFP = SDL_RWops* function( FILE*, SDL_bool );
    alias da_SDL_RWFromMem = SDL_RWops* function( void*, int );
    alias da_SDL_RWFromConstMem = SDL_RWops* function( const( void )*, int );
    alias da_SDL_AllocRW = SDL_RWops* function();
    alias da_SDL_FreeRW = void function( SDL_RWops* );
    alias da_SDL_ReadU8 = Uint8 function( SDL_RWops* );
    alias da_SDL_ReadLE16 = Uint16 function( SDL_RWops* );
    alias da_SDL_ReadBE16 = Uint16 function( SDL_RWops* );
    alias da_SDL_ReadLE32 = Uint32 function( SDL_RWops* );
    alias da_SDL_ReadBE32 = Uint32 function( SDL_RWops* );
    alias da_SDL_ReadLE64 = Uint64 function( SDL_RWops* );
    alias da_SDL_ReadBE64 = Uint64 function( SDL_RWops* );
    alias da_SDL_WriteU8 = size_t function( SDL_RWops*, Uint8 );
    alias da_SDL_WriteLE16 = size_t function( SDL_RWops*, Uint16 );
    alias da_SDL_WriteBE16 = size_t function( SDL_RWops*, Uint16 );
    alias da_SDL_WriteLE32 = size_t function( SDL_RWops*, Uint32 );
    alias da_SDL_WriteBE32 = size_t function( SDL_RWops*, Uint32 );
    alias da_SDL_WriteLE64 = size_t function( SDL_RWops*, Uint64 );
    alias da_SDL_WriteBE64 = size_t function( SDL_RWops*, Uint64 );

    // SDL_shape.h
    alias da_SDL_CreateShapedWindow = SDL_Window* function( const( char )*, uint, uint, uint, uint, Uint32 );
    alias da_SDL_IsShapedWindow = SDL_bool function( const( SDL_Window )* );
    alias da_SDL_SetWindowShape = int function( SDL_Window*, SDL_Surface*, SDL_WindowShapeMode* );
    alias da_SDL_GetShapedWindowMode = int function( SDL_Window*, SDL_WindowShapeMode* );

    // SDL_surface.h
    alias da_SDL_CreateRGBSurface = SDL_Surface* function( Uint32, int, int, int, Uint32, Uint32, Uint32, Uint32 );
    alias da_SDL_CreateRGBSurfaceFrom = SDL_Surface* function( void*, int, int, int, int, Uint32, Uint32, Uint32, Uint32 );
    alias da_SDL_FreeSurface = void function( SDL_Surface* );
    alias da_SDL_SetSurfacePalette = int function( SDL_Surface*, SDL_Palette* );
    alias da_SDL_LockSurface = int function( SDL_Surface* );
    alias da_SDL_UnlockSurface = int function( SDL_Surface* );
    alias da_SDL_LoadBMP_RW = SDL_Surface* function( SDL_RWops*, int );
    alias da_SDL_SaveBMP_RW = int function( SDL_Surface*, SDL_RWops*, int );
    alias da_SDL_SetSurfaceRLE = int function( SDL_Surface*, int );
    alias da_SDL_SetColorKey = int function( SDL_Surface*, int, Uint32 );
    alias da_SDL_GetColorKey = int function( SDL_Surface*, Uint32* );
    alias da_SDL_SetSurfaceColorMod = int function( SDL_Surface*, Uint8, Uint8, Uint8 );
    alias da_SDL_GetSurfaceColorMod = int function( SDL_Surface*, Uint8*, Uint8*, Uint8* );
    alias da_SDL_SetSurfaceAlphaMod = int function( SDL_Surface*, Uint8 );
    alias da_SDL_GetSurfaceAlphaMod = int function( SDL_Surface*, Uint8* );
    alias da_SDL_SetSurfaceBlendMode = int function( SDL_Surface*, SDL_BlendMode );
    alias da_SDL_GetSurfaceBlendMode = int function( SDL_Surface*, SDL_BlendMode* );
    alias da_SDL_SetClipRect = SDL_bool function( SDL_Surface*, const( SDL_Rect )* );
    alias da_SDL_GetClipRect = void function( SDL_Surface*, SDL_Rect* );
    alias da_SDL_ConvertSurface = SDL_Surface* function( SDL_Surface*, const( SDL_PixelFormat )*, Uint32 );
    alias da_SDL_ConvertSurfaceFormat = SDL_Surface* function( SDL_Surface*, Uint32, Uint32 );
    alias da_SDL_ConvertPixels = int function( int, int, Uint32, const( void )*, int, Uint32, void*, int );
    alias da_SDL_FillRect = int function( SDL_Surface*, const( SDL_Rect )*, Uint32 );
    alias da_SDL_FillRects = int function( SDL_Surface*, const( SDL_Rect )*, int, Uint32 );
    alias da_SDL_UpperBlit = int function( SDL_Surface*, const( SDL_Rect )*, SDL_Surface*, SDL_Rect* );
    alias da_SDL_LowerBlit = int function( SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect* );
    alias da_SDL_SoftStretch = int function( SDL_Surface*, const( SDL_Rect )*, SDL_Surface*, const( SDL_Rect )* );
    alias da_SDL_UpperBlitScaled = int function( SDL_Surface*, const( SDL_Rect )*, SDL_Surface*, SDL_Rect* );
    alias da_SDL_LowerBlitScaled = int function( SDL_Surface*, SDL_Rect*, SDL_Surface*, SDL_Rect* );

    alias SDL_BlitSurface = SDL_UpperBlit;
    alias SDL_BlitScaled = SDL_UpperBlitScaled;

    // SDL_system.h
    static if( Derelict_OS_Windows ) {
        alias da_SDL_Direct3D9GetAdapterIndex = int function( int );
        alias da_SDL_RenderGetD3D9Device = IDirect3DDevice9* function( SDL_Renderer* );
        alias da_SDL_DXGIGetOutputInfo = void function ( int, int*, int* );
    }
    static if( Derelict_OS_iOS ) {
        alias da_SDL_iPhoneSetAnimationCallback = int function( SDL_Window*, int, SDL_iPhoneAnimationCallback, void* );
        alias da_SDL_iPhoneSetEventPump = void function( SDL_bool );
    }
    static if( Derelict_OS_Android ) {
        alias da_SDL_AndroidGetJNIEnv = void* function();
        alias da_SDL_AndroidGetActivity = void* function();

        alias da_SDL_AndroidGetInternalStoragePath = const( char )* function();
        alias da_SDL_AndroidGetInternalStorageState = int function();
        alias da_SDL_AndroidGetExternalStoragePath = const( char )* function();
    }
    static if( Derelict_OS_WinRT ) {
        alias da_SDL_WinRTGetFSPathUNICODE = const( wchar_t )* function( SDL_WinRT_Path );
        alias da_SDL_WinRTGetFSPathUTF8 = const( char )* function( SDL_WinRT_Path );
    }

    // SDL_timer.h
    alias da_SDL_GetTicks = Uint32 function();
    alias da_SDL_GetPerformanceCounter = Uint64 function();
    alias da_SDL_GetPerformanceFrequency = Uint64 function();
    alias da_SDL_Delay = void function( Uint32 );
    alias da_SDL_AddTimer = SDL_TimerID function( Uint32, SDL_TimerCallback, void* );
    alias da_SDL_RemoveTimer = SDL_bool function( SDL_TimerID );

    // SDL_touch.h
    alias da_SDL_GetNumTouchDevices = int function();
    alias da_SDL_GetTouchDevice = SDL_TouchID function( int );
    alias da_SDL_GetNumTouchFingers = int function( SDL_TouchID );
    alias da_SDL_GetTouchFinger = SDL_Finger* function( SDL_TouchID, int );

    // SDL_version.h
    alias da_SDL_GetVersion = void function( SDL_version* );
    alias da_SDL_GetRevision = const( char )* function();
    alias da_SDL_GetRevisionNumber = int function();

    // SDL_video.h
    alias da_SDL_GetNumVideoDrivers = int function();
    alias da_SDL_GetVideoDriver = const( char )* function( int );
    alias da_SDL_VideoInit = int function( const( char )* );
    alias da_SDL_VideoQuit = void function();
    alias da_SDL_GetCurrentVideoDriver = const( char )* function();
    alias da_SDL_GetNumVideoDisplays = int function();
    alias da_SDL_GetDisplayName = const( char )* function( int );
    alias da_SDL_GetDisplayBounds = int function( int, SDL_Rect* );
    alias da_SDL_GetNumDisplayModes = int function( int );
    alias da_SDL_GetDisplayMode = int function( int, int, SDL_DisplayMode* );
    alias da_SDL_GetDesktopDisplayMode = int function( int, SDL_DisplayMode* );
    alias da_SDL_GetCurrentDisplayMode = int function( int, SDL_DisplayMode* );
    alias da_SDL_GetClosestDisplayMode = SDL_DisplayMode* function( int, const( SDL_DisplayMode )*, SDL_DisplayMode* );
    alias da_SDL_GetWindowDisplayIndex = int function( SDL_Window* );
    alias da_SDL_SetWindowDisplayMode = int function( SDL_Window*, const( SDL_DisplayMode )* );
    alias da_SDL_GetWindowDisplayMode = int function( SDL_Window*, SDL_DisplayMode* );
    alias da_SDL_GetWindowPixelFormat = Uint32 function( SDL_Window* );
    alias da_SDL_CreateWindow = SDL_Window* function( const( char )*, int, int, int, int, Uint32 );
    alias da_SDL_CreateWindowFrom = SDL_Window* function( const( void )* );
    alias da_SDL_GetWindowID = Uint32 function( SDL_Window* );
    alias da_SDL_GetWindowFromID = SDL_Window* function( Uint32 );
    alias da_SDL_GetWindowFlags = Uint32 function( SDL_Window* );
    alias da_SDL_SetWindowTitle = void function( SDL_Window*, const( char )* );
    alias da_SDL_GetWindowTitle = const( char )* function( SDL_Window* );
    alias da_SDL_SetWindowIcon = void function( SDL_Window*, SDL_Surface* );
    alias da_SDL_SetWindowData = void* function( SDL_Window*, const( char )*, void* );
    alias da_SDL_GetWindowData = void* function( SDL_Window*, const( char )* );
    alias da_SDL_SetWindowPosition = void function( SDL_Window*, int, int );
    alias da_SDL_GetWindowPosition = void function( SDL_Window*, int*, int* );
    alias da_SDL_SetWindowSize = void function( SDL_Window*, int, int );
    alias da_SDL_GetWindowSize = void function( SDL_Window*, int*, int* );
    alias da_SDL_SetWindowMinimumSize = void function( SDL_Window*, int, int );
    alias da_SDL_GetWindowMinimumSize = void function( SDL_Window*, int*, int* );
    alias da_SDL_SetWindowMaximumSize = void function( SDL_Window*, int, int );
    alias da_SDL_GetWindowMaximumSize = void function( SDL_Window*, int*, int* );
    alias da_SDL_SetWindowBordered = void function( SDL_Window*, SDL_bool );
    alias da_SDL_ShowWindow = void function( SDL_Window* );
    alias da_SDL_HideWindow = void function( SDL_Window* );
    alias da_SDL_RaiseWindow = void function( SDL_Window* );
    alias da_SDL_MaximizeWindow = void function( SDL_Window* );
    alias da_SDL_MinimizeWindow = void function( SDL_Window* );
    alias da_SDL_RestoreWindow = void function( SDL_Window* );
    alias da_SDL_SetWindowFullscreen = int function( SDL_Window*, Uint32 );
    alias da_SDL_GetWindowSurface = SDL_Surface* function( SDL_Window* );
    alias da_SDL_UpdateWindowSurface = int function( SDL_Window* );
    alias da_SDL_UpdateWindowSurfaceRects = int function( SDL_Window*, SDL_Rect*, int );
    alias da_SDL_SetWindowGrab = void function( SDL_Window*, SDL_bool );
    alias da_SDL_GetWindowGrab = SDL_bool function( SDL_Window* );
    alias da_SDL_SetWindowBrightness = int function( SDL_Window*, float );
    alias da_SDL_GetWindowBrightness = float function( SDL_Window* );
    alias da_SDL_SetWindowGammaRamp = int function( SDL_Window*, const( Uint16 )*, const( Uint16 )*, const( Uint16 )*, const( Uint16 )* );
    alias da_SDL_GetWindowGammaRamp = int function( SDL_Window*, Uint16*, Uint16*, Uint16*, Uint16* );
    alias da_SDL_DestroyWindow = void function( SDL_Window* );
    alias da_SDL_IsScreenSaverEnabled = SDL_bool function();
    alias da_SDL_EnableScreenSaver = void function();
    alias da_SDL_DisableScreenSaver = void function();
    alias da_SDL_GL_LoadLibrary = int function( const( char )* );
    alias da_SDL_GL_GetProcAddress = void* function( const( char )* );
    alias da_SDL_GL_UnloadLibrary = void function();
    alias da_SDL_GL_ExtensionSupported = SDL_bool function( const( char )* );
    alias da_SDL_GL_SetAttribute = int function( SDL_GLattr, int );
    alias da_SDL_GL_GetAttribute = int function( SDL_GLattr, int* );
    alias da_SDL_GL_CreateContext = SDL_GLContext function( SDL_Window* );
    alias da_SDL_GL_MakeCurrent = int function( SDL_Window*, SDL_GLContext );
    alias da_SDL_GL_GetCurrentWindow = SDL_Window* function();
    alias da_SDL_GL_GetCurrentContext = SDL_GLContext function();
    alias da_SDL_GL_GetDrawableSize = void function( SDL_Window*, int*, int* );
    alias da_SDL_GL_SetSwapInterval = int function( int );
    alias da_SDL_GL_GetSwapInterval = int function();
    alias da_SDL_GL_SwapWindow = void function( SDL_Window* );
    alias da_SDL_GL_DeleteContext = void function( SDL_GLContext );

    // SDL_filesystem.h
    alias da_SDL_GetBasePath = char* function();
    alias da_SDL_GetPrefPath = char* function( const( char )* org, const( char )* app);
}

// SDL_audio.h
nothrow SDL_AudioSpec* SDL_LoadWAV( const( char )* file, SDL_AudioSpec* spec, Uint8** audio_buf, Uint32* len ) {
    return SDL_LoadWAV_RW( SDL_RWFromFile( file, "rb" ), 1, spec, audio_buf, len );
}

// SDL_events.h
nothrow Uint8 SDL_GetEventState( Uint32 type ) {
    return SDL_EventState( type, SDL_QUERY );
}

// SDL_quit.h
nothrow bool SDL_QuitRequested() {
    SDL_PumpEvents();
    return SDL_PeepEvents( null, 0, SDL_PEEKEVENT, SDL_QUIT, SDL_QUIT ) > 0;
}

// SDL_surface.h
nothrow SDL_Surface* SDL_LoadBMP( const( char )* file ) {
    return SDL_LoadBMP_RW( SDL_RWFromFile( file, "rb" ), 1 );
}

nothrow int SDL_SaveBMP( SDL_Surface* surface, const( char )* file ) {
    return SDL_SaveBMP_RW( surface, SDL_RWFromFile( file, "wb" ), 1 );
}

__gshared {
    da_SDL_Init SDL_Init;
    da_SDL_InitSubSystem SDL_InitSubSystem;
    da_SDL_QuitSubSystem SDL_QuitSubSystem;
    da_SDL_WasInit SDL_WasInit;
    da_SDL_Quit SDL_Quit;
    da_SDL_free SDL_free;

    da_SDL_SetAssertionHandler SDL_SetAssertionHandler;
    da_SDL_GetAssertionReport SDL_GetAssertionReport;
    da_SDL_ResetAssertionReport SDL_ResetAssertionReport;

    da_SDL_GetNumAudioDrivers SDL_GetNumAudioDrivers;
    da_SDL_GetAudioDriver SDL_GetAudioDriver;
    da_SDL_AudioInit SDL_AudioInit;
    da_SDL_AudioQuit SDL_AudioQuit;
    da_SDL_GetCurrentAudioDriver SDL_GetCurrentAudioDriver;
    da_SDL_OpenAudio SDL_OpenAudio;
    da_SDL_GetNumAudioDevices SDL_GetNumAudioDevices;
    da_SDL_GetAudioDeviceName SDL_GetAudioDeviceName;
    da_SDL_OpenAudioDevice SDL_OpenAudioDevice;
    da_SDL_GetAudioStatus SDL_GetAudioStatus;
    da_SDL_GetAudioDeviceStatus SDL_GetAudioDeviceStatus;
    da_SDL_PauseAudio SDL_PauseAudio;
    da_SDL_PauseAudioDevice SDL_PauseAudioDevice;
    da_SDL_LoadWAV_RW SDL_LoadWAV_RW;
    da_SDL_FreeWAV SDL_FreeWAV;
    da_SDL_BuildAudioCVT SDL_BuildAudioCVT;
    da_SDL_ConvertAudio SDL_ConvertAudio;
    da_SDL_MixAudio SDL_MixAudio;
    da_SDL_MixAudioFormat SDL_MixAudioFormat;
    da_SDL_LockAudio SDL_LockAudio;
    da_SDL_LockAudioDevice SDL_LockAudioDevice;
    da_SDL_UnlockAudio SDL_UnlockAudio;
    da_SDL_UnlockAudioDevice SDL_UnlockAudioDevice;
    da_SDL_CloseAudio SDL_CloseAudio;
    da_SDL_CloseAudioDevice SDL_CloseAudioDevice;
//    da_SDL_AudioDeviceConnected SDL_AudioDeviceConnected;

    da_SDL_SetClipboardText SDL_SetClipboardText;
    da_SDL_GetClipboardText SDL_GetClipboardText;
    da_SDL_HasClipboardText SDL_HasClipboardText;

    da_SDL_GetCPUCount SDL_GetCPUCount;
    da_SDL_GetCPUCacheLineSize SDL_GetCPUCacheLineSize;
    da_SDL_HasRDTSC SDL_HasRDTSC;
    da_SDL_HasAltiVec SDL_HasAltiVec;
    da_SDL_HasMMX SDL_HasMMX;
    da_SDL_Has3DNow SDL_Has3DNow;
    da_SDL_HasSSE SDL_HasSSE;
    da_SDL_HasSSE2 SDL_HasSSE2;
    da_SDL_HasSSE3 SDL_HasSSE3;
    da_SDL_HasSSE41 SDL_HasSSE41;
    da_SDL_HasSSE42 SDL_HasSSE42;
    da_SDL_GetSystemRAM SDL_GetSystemRAM;

    da_SDL_SetError SDL_SetError;
    da_SDL_GetError SDL_GetError;
    da_SDL_ClearError SDL_ClearError;

    da_SDL_PumpEvents SDL_PumpEvents;
    da_SDL_PeepEvents SDL_PeepEvents;
    da_SDL_HasEvent SDL_HasEvent;
    da_SDL_HasEvents SDL_HasEvents;
    da_SDL_FlushEvent SDL_FlushEvent;
    da_SDL_FlushEvents SDL_FlushEvents;
    da_SDL_PollEvent SDL_PollEvent;
    da_SDL_WaitEvent SDL_WaitEvent;
    da_SDL_WaitEventTimeout SDL_WaitEventTimeout;
    da_SDL_PushEvent SDL_PushEvent;
    da_SDL_SetEventFilter SDL_SetEventFilter;
    da_SDL_GetEventFilter SDL_GetEventFilter;
    da_SDL_AddEventWatch SDL_AddEventWatch;
    da_SDL_DelEventWatch SDL_DelEventWatch;
    da_SDL_FilterEvents SDL_FilterEvents;
    da_SDL_EventState SDL_EventState;
    da_SDL_RegisterEvents SDL_RegisterEvents;

    da_SDL_GameControllerAddMapping SDL_GameControllerAddMapping;
    da_SDL_GameControllerMappingForGUID SDL_GameControllerMappingForGUID;
    da_SDL_GameControllerMapping SDL_GameControllerMapping;
    da_SDL_IsGameController SDL_IsGameController;
    da_SDL_GameControllerNameForIndex SDL_GameControllerNameForIndex;
    da_SDL_GameControllerOpen SDL_GameControllerOpen;
    da_SDL_GameControllerName SDL_GameControllerName;
    da_SDL_GameControllerGetAttached SDL_GameControllerGetAttached;
    da_SDL_GameControllerGetJoystick SDL_GameControllerGetJoystick;
    da_SDL_GameControllerEventState SDL_GameControllerEventState;
    da_SDL_GameControllerUpdate SDL_GameControllerUpdate;
    da_SDL_GameControllerGetAxisFromString SDL_GameControllerGetAxisFromString;
    da_SDL_GameControllerGetStringForAxis SDL_GameControllerGetStringForAxis;
    da_SDL_GameControllerGetBindForAxis SDL_GameControllerGetBindForAxis;
    da_SDL_GameControllerGetAxis SDL_GameControllerGetAxis;
    da_SDL_GameControllerGetButtonFromString SDL_GameControllerGetButtonFromString;
    da_SDL_GameControllerGetStringForButton SDL_GameControllerGetStringForButton;
    da_SDL_GameControllerGetBindForButton SDL_GameControllerGetBindForButton;
    da_SDL_GameControllerGetButton SDL_GameControllerGetButton;
    da_SDL_GameControllerClose SDL_GameControllerClose;

    da_SDL_RecordGesture SDL_RecordGesture;
    da_SDL_SaveAllDollarTemplates SDL_SaveAllDollarTemplates;
    da_SDL_SaveDollarTemplate SDL_SaveDollarTemplate;
    da_SDL_LoadDollarTemplates SDL_LoadDollarTemplates;

    da_SDL_NumHaptics SDL_NumHaptics;
    da_SDL_HapticName SDL_HapticName;
    da_SDL_HapticOpen SDL_HapticOpen;
    da_SDL_HapticOpened SDL_HapticOpened;
    da_SDL_HapticIndex SDL_HapticIndex;
    da_SDL_MouseIsHaptic SDL_MouseIsHaptic;
    da_SDL_HapticOpenFromMouse SDL_HapticOpenFromMouse;
    da_SDL_JoystickIsHaptic SDL_JoystickIsHaptic;
    da_SDL_HapticOpenFromJoystick SDL_HapticOpenFromJoystick;
    da_SDL_HapticClose SDL_HapticClose;
    da_SDL_HapticNumEffects SDL_HapticNumEffects;
    da_SDL_HapticNumEffectsPlaying SDL_HapticNumEffectsPlaying;
    da_SDL_HapticQuery SDL_HapticQuery;
    da_SDL_HapticNumAxes SDL_HapticNumAxes;
    da_SDL_HapticEffectSupported SDL_HapticEffectSupported;
    da_SDL_HapticNewEffect SDL_HapticNewEffect;
    da_SDL_HapticUpdateEffect SDL_HapticUpdateEffect;
    da_SDL_HapticRunEffect SDL_HapticRunEffect;
    da_SDL_HapticStopEffect SDL_HapticStopEffect;
    da_SDL_HapticDestroyEffect SDL_HapticDestroyEffect;
    da_SDL_HapticGetEffectStatus SDL_HapticGetEffectStatus;
    da_SDL_HapticSetGain SDL_HapticSetGain;
    da_SDL_HapticSetAutocenter SDL_HapticSetAutocenter;
    da_SDL_HapticPause SDL_HapticPause;
    da_SDL_HapticUnpause SDL_HapticUnpause;
    da_SDL_HapticStopAll SDL_HapticStopAll;
    da_SDL_HapticRumbleSupported SDL_HapticRumbleSupported;
    da_SDL_HapticRumbleInit SDL_HapticRumbleInit;
    da_SDL_HapticRumblePlay SDL_HapticRumblePlay;
    da_SDL_HapticRumbleStop SDL_HapticRumbleStop;

    da_SDL_SetHintWithPriority SDL_SetHintWithPriority;
    da_SDL_SetHint SDL_SetHint;
    da_SDL_GetHint SDL_GetHint;
    da_SDL_AddHintCallback SDL_AddHintCallback;
    da_SDL_DelHintCallback SDL_DelHintCallback;
    da_SDL_ClearHints SDL_ClearHints;

//    da_SDL_RedetectInputDevices SDL_RedetectInputDevices;
//    da_SDL_GetNumInputDevices SDL_GetNumInputDevices;
//    da_SDL_GetInputDeviceName SDL_GetInputDeviceName;
    da_SDL_IsDeviceDisconnected SDL_IsDeviceDisconnected;

    da_SDL_NumJoysticks SDL_NumJoysticks;
    da_SDL_JoystickNameForIndex SDL_JoystickNameForIndex;
    da_SDL_JoystickOpen SDL_JoystickOpen;
    da_SDL_JoystickName SDL_JoystickName;
    da_SDL_JoystickGetDeviceGUID SDL_JoystickGetDeviceGUID;
    da_SDL_JoystickGetGUID SDL_JoystickGetGUID;
    da_SDL_JoystickGetGUIDString SDL_JoystickGetGUIDString;
    da_SDL_JoystickGetGUIDFromString SDL_JoystickGetGUIDFromString;
    da_SDL_JoystickGetAttached SDL_JoystickGetAttached;
    da_SDL_JoystickInstanceID SDL_JoystickInstanceID;
    da_SDL_JoystickNumAxes SDL_JoystickNumAxes;
    da_SDL_JoystickNumBalls SDL_JoystickNumBalls;
    da_SDL_JoystickNumHats SDL_JoystickNumHats;
    da_SDL_JoystickNumButtons SDL_JoystickNumButtons;
    da_SDL_JoystickUpdate SDL_JoystickUpdate;
    da_SDL_JoystickEventState SDL_JoystickEventState;
    da_SDL_JoystickGetAxis SDL_JoystickGetAxis;
    da_SDL_JoystickGetHat SDL_JoystickGetHat;
    da_SDL_JoystickGetBall SDL_JoystickGetBall;
    da_SDL_JoystickGetButton SDL_JoystickGetButton;
    da_SDL_JoystickClose SDL_JoystickClose;

    da_SDL_GetKeyboardFocus SDL_GetKeyboardFocus;
    da_SDL_GetKeyboardState SDL_GetKeyboardState;
    da_SDL_GetModState SDL_GetModState;
    da_SDL_SetModState SDL_SetModState;
    da_SDL_GetKeyFromScancode SDL_GetKeyFromScancode;
    da_SDL_GetScancodeFromKey SDL_GetScancodeFromKey;
    da_SDL_GetScancodeName SDL_GetScancodeName;
    da_SDL_GetScancodeFromName SDL_GetScancodeFromName;
    da_SDL_GetKeyName SDL_GetKeyName;
    da_SDL_GetKeyFromName SDL_GetKeyFromName;
    da_SDL_StartTextInput SDL_StartTextInput;
    da_SDL_IsTextInputActive SDL_IsTextInputActive;
    da_SDL_StopTextInput SDL_StopTextInput;
    da_SDL_SetTextInputRect SDL_SetTextInputRect;
    da_SDL_HasScreenKeyboardSupport SDL_HasScreenKeyboardSupport;
    da_SDL_IsScreenKeyboardShown SDL_IsScreenKeyboardShown;

    da_SDL_LoadObject SDL_LoadObject;
    da_SDL_LoadFunction SDL_LoadFunction;
    da_SDL_UnloadObject SDL_UnloadObject;

    da_SDL_LogSetAllPriority SDL_LogSetAllPriority;
    da_SDL_LogSetPriority SDL_LogSetPriority;
    da_SDL_LogGetPriority SDL_LogGetPriority;
    da_SDL_LogResetPriorities SDL_LogResetPriorities;
    da_SDL_Log SDL_Log;
    da_SDL_LogVerbose SDL_LogVerbose;
    da_SDL_LogDebug SDL_LogDebug;
    da_SDL_LogInfo SDL_LogInfo;
    da_SDL_LogWarn SDL_LogWarn;
    da_SDL_LogError SDL_LogError;
    da_SDL_LogCritical SDL_LogCritical;
    da_SDL_LogMessage SDL_LogMessage;
    da_SDL_LogMessageV SDL_LogMessageV;
    da_SDL_LogGetOutputFunction SDL_LogGetOutputFunction;
    da_SDL_LogSetOutputFunction SDL_LogSetOutputFunction;

    da_SDL_ShowMessageBox SDL_ShowMessageBox;
    da_SDL_ShowSimpleMessageBox SDL_ShowSimpleMessageBox;

    da_SDL_GetMouseFocus SDL_GetMouseFocus;
    da_SDL_GetMouseState SDL_GetMouseState;
    da_SDL_GetRelativeMouseState SDL_GetRelativeMouseState;
    da_SDL_WarpMouseInWindow SDL_WarpMouseInWindow;
    da_SDL_SetRelativeMouseMode SDL_SetRelativeMouseMode;
    da_SDL_GetRelativeMouseMode SDL_GetRelativeMouseMode;
    da_SDL_CreateCursor SDL_CreateCursor;
    da_SDL_CreateColorCursor SDL_CreateColorCursor;
    da_SDL_CreateSystemCursor SDL_CreateSystemCursor;
    da_SDL_SetCursor SDL_SetCursor;
    da_SDL_GetCursor SDL_GetCursor;
    da_SDL_FreeCursor SDL_FreeCursor;
    da_SDL_ShowCursor SDL_ShowCursor;

    da_SDL_GetPixelFormatName SDL_GetPixelFormatName;
    da_SDL_PixelFormatEnumToMasks SDL_PixelFormatEnumToMasks;
    da_SDL_MasksToPixelFormatEnum SDL_MasksToPixelFormatEnum;
    da_SDL_AllocFormat SDL_AllocFormat;
    da_SDL_FreeFormat SDL_FreeFormat;
    da_SDL_AllocPalette SDL_AllocPalette;
    da_SDL_SetPixelFormatPalette SDL_SetPixelFormatPalette;
    da_SDL_SetPaletteColors SDL_SetPaletteColors;
    da_SDL_FreePalette SDL_FreePalette;
    da_SDL_MapRGB SDL_MapRGB;
    da_SDL_MapRGBA SDL_MapRGBA;
    da_SDL_GetRGB SDL_GetRGB;
    da_SDL_GetRGBA SDL_GetRGBA;
    da_SDL_CalculateGammaRamp SDL_CalculateGammaRamp;

    da_SDL_GetPlatform SDL_GetPlatform;

    da_SDL_GetPowerInfo SDL_GetPowerInfo;

    da_SDL_HasIntersection SDL_HasIntersection;
    da_SDL_IntersectRect SDL_IntersectRect;
    da_SDL_UnionRect SDL_UnionRect;
    da_SDL_EnclosePoints SDL_EnclosePoints;
    da_SDL_IntersectRectAndLine SDL_IntersectRectAndLine;

    da_SDL_GetNumRenderDrivers SDL_GetNumRenderDrivers;
    da_SDL_GetRenderDriverInfo SDL_GetRenderDriverInfo;
    da_SDL_CreateWindowAndRenderer SDL_CreateWindowAndRenderer;
    da_SDL_CreateRenderer SDL_CreateRenderer;
    da_SDL_CreateSoftwareRenderer SDL_CreateSoftwareRenderer;
    da_SDL_GetRenderer SDL_GetRenderer;
    da_SDL_GetRendererInfo SDL_GetRendererInfo;
    da_SDL_CreateTexture SDL_CreateTexture;
    da_SDL_CreateTextureFromSurface SDL_CreateTextureFromSurface;
    da_SDL_QueryTexture SDL_QueryTexture;
    da_SDL_SetTextureColorMod SDL_SetTextureColorMod;
    da_SDL_GetTextureColorMod SDL_GetTextureColorMod;
    da_SDL_SetTextureAlphaMod SDL_SetTextureAlphaMod;
    da_SDL_GetTextureAlphaMod SDL_GetTextureAlphaMod;
    da_SDL_SetTextureBlendMode SDL_SetTextureBlendMode;
    da_SDL_GetTextureBlendMode SDL_GetTextureBlendMode;
    da_SDL_UpdateTexture SDL_UpdateTexture;
    da_SDL_UpdateYUVTexture SDL_UpdateYUVTexture;
    da_SDL_LockTexture SDL_LockTexture;
    da_SDL_UnlockTexture SDL_UnlockTexture;
    da_SDL_RenderTargetSupported SDL_RenderTargetSupported;
    da_SDL_SetRenderTarget SDL_SetRenderTarget;
    da_SDL_GetRenderTarget SDL_GetRenderTarget;
    da_SDL_RenderSetLogicalSize SDL_RenderSetLogicalSize;
    da_SDL_RenderGetLogicalSize SDL_RenderGetLogicalSize;
    da_SDL_RenderSetViewport SDL_RenderSetViewport;
    da_SDL_RenderGetViewport SDL_RenderGetViewport;
    da_SDL_RenderSetScale SDL_RenderSetScale;
    da_SDL_RenderGetScale SDL_RenderGetScale;
    da_SDL_SetRenderDrawColor SDL_SetRenderDrawColor;
    da_SDL_GetRenderDrawColor SDL_GetRenderDrawColor;
    da_SDL_SetRenderDrawBlendMode SDL_SetRenderDrawBlendMode;
    da_SDL_GetRenderDrawBlendMode SDL_GetRenderDrawBlendMode;
    da_SDL_RenderClear SDL_RenderClear;
    da_SDL_RenderDrawPoint SDL_RenderDrawPoint;
    da_SDL_RenderDrawPoints SDL_RenderDrawPoints;
    da_SDL_RenderDrawLine SDL_RenderDrawLine;
    da_SDL_RenderDrawLines SDL_RenderDrawLines;
    da_SDL_RenderDrawRect SDL_RenderDrawRect;
    da_SDL_RenderDrawRects SDL_RenderDrawRects;
    da_SDL_RenderFillRect SDL_RenderFillRect;
    da_SDL_RenderFillRects SDL_RenderFillRects;
    da_SDL_RenderCopy SDL_RenderCopy;
    da_SDL_RenderCopyEx SDL_RenderCopyEx;
    da_SDL_RenderReadPixels SDL_RenderReadPixels;
    da_SDL_RenderPresent SDL_RenderPresent;
    da_SDL_DestroyTexture SDL_DestroyTexture;
    da_SDL_DestroyRenderer SDL_DestroyRenderer;
    da_SDL_GL_BindTexture SDL_GL_BindTexture;
    da_SDL_GL_UnbindTexture SDL_GL_UnbindTexture;

    da_SDL_RWFromFile SDL_RWFromFile;
    da_SDL_RWFromFP SDL_RWFromFP;
    da_SDL_RWFromMem SDL_RWFromMem;
    da_SDL_RWFromConstMem SDL_RWFromConstMem;
    da_SDL_AllocRW SDL_AllocRW;
    da_SDL_FreeRW SDL_FreeRW;
    da_SDL_ReadU8 SDL_ReadU8;
    da_SDL_ReadLE16 SDL_ReadLE16;
    da_SDL_ReadBE16 SDL_ReadBE16;
    da_SDL_ReadLE32 SDL_ReadLE32;
    da_SDL_ReadBE32 SDL_ReadBE32;
    da_SDL_ReadLE64 SDL_ReadLE64;
    da_SDL_ReadBE64 SDL_ReadBE64;
    da_SDL_WriteU8 SDL_WriteU8;
    da_SDL_WriteLE16 SDL_WriteLE16;
    da_SDL_WriteBE16 SDL_WriteBE16;
    da_SDL_WriteLE32 SDL_WriteLE32;
    da_SDL_WriteBE32 SDL_WriteBE32;
    da_SDL_WriteLE64 SDL_WriteLE64;
    da_SDL_WriteBE64 SDL_WriteBE64;

    da_SDL_CreateShapedWindow SDL_CreateShapedWindow;
    da_SDL_IsShapedWindow SDL_IsShapedWindow;
    da_SDL_SetWindowShape SDL_SetWindowShape;
    da_SDL_GetShapedWindowMode SDL_GetShapedWindowMode;

    da_SDL_CreateRGBSurface SDL_CreateRGBSurface;
    da_SDL_CreateRGBSurfaceFrom SDL_CreateRGBSurfaceFrom;
    da_SDL_FreeSurface SDL_FreeSurface;
    da_SDL_SetSurfacePalette SDL_SetSurfacePalette;
    da_SDL_LockSurface SDL_LockSurface;
    da_SDL_UnlockSurface SDL_UnlockSurface;
    da_SDL_LoadBMP_RW SDL_LoadBMP_RW;
    da_SDL_SaveBMP_RW SDL_SaveBMP_RW;
    da_SDL_SetSurfaceRLE SDL_SetSurfaceRLE;
    da_SDL_SetColorKey SDL_SetColorKey;
    da_SDL_GetColorKey SDL_GetColorKey;
    da_SDL_SetSurfaceColorMod SDL_SetSurfaceColorMod;
    da_SDL_GetSurfaceColorMod SDL_GetSurfaceColorMod;
    da_SDL_SetSurfaceAlphaMod SDL_SetSurfaceAlphaMod;
    da_SDL_GetSurfaceAlphaMod SDL_GetSurfaceAlphaMod;
    da_SDL_SetSurfaceBlendMode SDL_SetSurfaceBlendMode;
    da_SDL_GetSurfaceBlendMode SDL_GetSurfaceBlendMode;
    da_SDL_SetClipRect SDL_SetClipRect;
    da_SDL_GetClipRect SDL_GetClipRect;
    da_SDL_ConvertSurface SDL_ConvertSurface;
    da_SDL_ConvertSurfaceFormat SDL_ConvertSurfaceFormat;
    da_SDL_ConvertPixels SDL_ConvertPixels;
    da_SDL_FillRect SDL_FillRect;
    da_SDL_FillRects SDL_FillRects;
    da_SDL_UpperBlit SDL_UpperBlit;
    da_SDL_LowerBlit SDL_LowerBlit;
    da_SDL_SoftStretch SDL_SoftStretch;
    da_SDL_UpperBlitScaled SDL_UpperBlitScaled;
    da_SDL_LowerBlitScaled SDL_LowerBlitScaled;

    static if( Derelict_OS_Windows ) {
        da_SDL_Direct3D9GetAdapterIndex SDL_Direct3D9GetAdapterIndex ;
        da_SDL_RenderGetD3D9Device SDL_RenderGetD3D9Device;
        da_SDL_DXGIGetOutputInfo SDL_DXGIGetOutputInfo;
    }
    static if( Derelict_OS_iOS ) {
        da_SDL_iPhoneSetAnimationCallback SDL_iPhoneSetAnimationCallback;
        da_SDL_iPhoneSetEventPump SDL_iPhoneSetEventPump;
    }
    static if( Derelict_OS_Android ) {
        da_SDL_AndroidGetJNIEnv SDL_AndroidGetJNIEnv;
        da_SDL_AndroidGetActivity SDL_AndroidGetActivity;

        da_SDL_AndroidGetInternalStoragePath SDL_AndroidGetInternalStoragePath;
        da_SDL_AndroidGetInternalStorageState SDL_AndroidGetInternalStorageState;
        da_SDL_AndroidGetExternalStoragePath SDL_AndroidGetExternalStoragePath;
    }
    static if( Derelict_OS_WinRT ) {
        da_SDL_WinRTGetFSPathUNICODE SDL_WinRTGetFSPathUNICODE;
        da_SDL_WinRTGetFSPathUTF8 SDL_WinRTGetFSPathUTF8;
    }

    da_SDL_GetTicks SDL_GetTicks;
    da_SDL_GetPerformanceCounter SDL_GetPerformanceCounter;
    da_SDL_GetPerformanceFrequency SDL_GetPerformanceFrequency;
    da_SDL_Delay SDL_Delay;
    da_SDL_AddTimer SDL_AddTimer;
    da_SDL_RemoveTimer SDL_RemoveTimer;

    da_SDL_GetNumTouchDevices SDL_GetNumTouchDevices;
    da_SDL_GetTouchDevice SDL_GetTouchDevice;
    da_SDL_GetNumTouchFingers SDL_GetNumTouchFingers;
    da_SDL_GetTouchFinger SDL_GetTouchFinger;

    da_SDL_GetVersion SDL_GetVersion;
    da_SDL_GetRevision SDL_GetRevision;
    da_SDL_GetRevisionNumber SDL_GetRevisionNumber;

    da_SDL_GetNumVideoDrivers SDL_GetNumVideoDrivers;
    da_SDL_GetVideoDriver SDL_GetVideoDriver;
    da_SDL_VideoInit SDL_VideoInit;
    da_SDL_VideoQuit SDL_VideoQuit;
    da_SDL_GetCurrentVideoDriver SDL_GetCurrentVideoDriver;
    da_SDL_GetNumVideoDisplays SDL_GetNumVideoDisplays;
    da_SDL_GetDisplayName SDL_GetDisplayName;
    da_SDL_GetDisplayBounds SDL_GetDisplayBounds;
    da_SDL_GetNumDisplayModes SDL_GetNumDisplayModes;
    da_SDL_GetDisplayMode SDL_GetDisplayMode;
    da_SDL_GetDesktopDisplayMode SDL_GetDesktopDisplayMode;
    da_SDL_GetCurrentDisplayMode SDL_GetCurrentDisplayMode;
    da_SDL_GetClosestDisplayMode SDL_GetClosestDisplayMode;
    da_SDL_GetWindowDisplayIndex SDL_GetWindowDisplayIndex;
    da_SDL_SetWindowDisplayMode SDL_SetWindowDisplayMode;
    da_SDL_GetWindowDisplayMode SDL_GetWindowDisplayMode;
    da_SDL_GetWindowPixelFormat SDL_GetWindowPixelFormat;
    da_SDL_CreateWindow SDL_CreateWindow;
    da_SDL_CreateWindowFrom SDL_CreateWindowFrom;
    da_SDL_GetWindowID SDL_GetWindowID;
    da_SDL_GetWindowFromID SDL_GetWindowFromID;
    da_SDL_GetWindowFlags SDL_GetWindowFlags;
    da_SDL_SetWindowTitle SDL_SetWindowTitle;
    da_SDL_GetWindowTitle SDL_GetWindowTitle;
    da_SDL_SetWindowIcon SDL_SetWindowIcon;
    da_SDL_SetWindowData SDL_SetWindowData;
    da_SDL_GetWindowData SDL_GetWindowData;
    da_SDL_SetWindowPosition SDL_SetWindowPosition;
    da_SDL_GetWindowPosition SDL_GetWindowPosition;
    da_SDL_SetWindowSize SDL_SetWindowSize;
    da_SDL_GetWindowSize SDL_GetWindowSize;
    da_SDL_SetWindowMinimumSize SDL_SetWindowMinimumSize;
    da_SDL_GetWindowMinimumSize SDL_GetWindowMinimumSize;
    da_SDL_SetWindowMaximumSize SDL_SetWindowMaximumSize;
    da_SDL_GetWindowMaximumSize SDL_GetWindowMaximumSize;
    da_SDL_SetWindowBordered SDL_SetWindowBordered;
    da_SDL_ShowWindow SDL_ShowWindow;
    da_SDL_HideWindow SDL_HideWindow;
    da_SDL_RaiseWindow SDL_RaiseWindow;
    da_SDL_MaximizeWindow SDL_MaximizeWindow;
    da_SDL_MinimizeWindow SDL_MinimizeWindow;
    da_SDL_RestoreWindow SDL_RestoreWindow;
    da_SDL_SetWindowFullscreen SDL_SetWindowFullscreen;
    da_SDL_GetWindowSurface SDL_GetWindowSurface;
    da_SDL_UpdateWindowSurface SDL_UpdateWindowSurface;
    da_SDL_UpdateWindowSurfaceRects SDL_UpdateWindowSurfaceRects;
    da_SDL_SetWindowGrab SDL_SetWindowGrab;
    da_SDL_GetWindowGrab SDL_GetWindowGrab;
    da_SDL_SetWindowBrightness SDL_SetWindowBrightness;
    da_SDL_GetWindowBrightness SDL_GetWindowBrightness;
    da_SDL_SetWindowGammaRamp SDL_SetWindowGammaRamp;
    da_SDL_GetWindowGammaRamp SDL_GetWindowGammaRamp;
    da_SDL_DestroyWindow SDL_DestroyWindow;
    da_SDL_IsScreenSaverEnabled SDL_IsScreenSaverEnabled;
    da_SDL_EnableScreenSaver SDL_EnableScreenSaver;
    da_SDL_DisableScreenSaver SDL_DisableScreenSaver;
    da_SDL_GL_LoadLibrary SDL_GL_LoadLibrary;
    da_SDL_GL_GetProcAddress SDL_GL_GetProcAddress;
    da_SDL_GL_UnloadLibrary SDL_GL_UnloadLibrary;
    da_SDL_GL_ExtensionSupported SDL_GL_ExtensionSupported;
    da_SDL_GL_SetAttribute SDL_GL_SetAttribute;
    da_SDL_GL_GetAttribute SDL_GL_GetAttribute;
    da_SDL_GL_CreateContext SDL_GL_CreateContext;
    da_SDL_GL_MakeCurrent SDL_GL_MakeCurrent;
    da_SDL_GL_GetCurrentWindow SDL_GL_GetCurrentWindow;
    da_SDL_GL_GetCurrentContext SDL_GL_GetCurrentContext;
    da_SDL_GL_GetDrawableSize SDL_GL_GetDrawableSize;
    da_SDL_GL_SetSwapInterval SDL_GL_SetSwapInterval;
    da_SDL_GL_GetSwapInterval SDL_GL_GetSwapInterval;
    da_SDL_GL_SwapWindow SDL_GL_SwapWindow;
    da_SDL_GL_DeleteContext SDL_GL_DeleteContext;

    da_SDL_GetBasePath SDL_GetBasePath;
    da_SDL_GetPrefPath SDL_GetPrefPath;
}

